package com.hk.service;

import com.hk.commons.HqlFilter;
import com.hk.commons.entity.Organization;
import com.hk.commons.vo.CheckInfo;

import java.util.List;

/**
 * 
 * @author Sam
 * @date 2016年2月17日上午11:04:35
 */
public interface IOrganization_New {

	/**
	 * 根据Id 获取组织架构
	 * @param id
	 * @return
	 */
	public Organization findById(Integer id);

	/**
	 * 添加组织架构
	 * @param
	 * @return
	 */
	public Integer add(Organization u);

	/**
	 * 删除组织架构
	 * @param id
	 * @return
	 */
	public Organization delete(Integer id);


	/**
	 * 删除前检查
	 * @param id
	 * @return
	 */
	public CheckInfo deleteCheck(Integer id);

	public Organization getByFullName(String name);


	public Organization getParBySonName(String sonName);

	/** 分页获取 */
	public List<Organization> find(int pageNum, int pageSize);

	public List<Organization> findByFilter(HqlFilter hqlFilter, int pageNum, int pageSize);

	public List<Organization> findByFilter(HqlFilter hqlFilter);

	/**
	 * 获取该用户可见的所有的组织架构
	 * @param userId
	 * @return
	 */
	public List<Organization>  findByUser(Long userId);


	/**
	 * 获取该组织架构下所有的虚拟部门
	 *
	 *
	 * @param orgId
	 * @return
	 */
	public List<Organization> getVirsualDep(Integer orgId);

	/**
	 * 是否有直属职务
	 * @param orgId
	 * @return
	 */
	public Boolean  hasVirsualDep(Integer orgId);


	/**
	 * 是否显示虚拟职务
	 * @param orgId
	 * @return
	 */
	public Boolean  showVirsualDep(Integer orgId);

	public Long countByFilter(HqlFilter hqlFilter);

	public List executeListHql(String hql);

	/**
	 * 获取该组织架构节点的全名
	 * @param id
	 * @return
	 */
	public String getDepNameById(Integer id);


	/**
	 * 根据id 获取渠道名
	 * @param orgId
	 * @return
	 */
	public String getChannelNameByOrgId(int orgId);

	/**
	 * 根据channelId 获取渠道名
	 * @param channelId
	 * @return
	 */
	public String getChannelNameByChannelId(int channelId);

	/**
	 * 如果是部门负责人，则获取相关code 列表
	 * @param userId
	 * @return
	 */
	public List<Integer> getDepLeaderChannelStrList(Long userId);

	/**
	 * 获取虚拟部门的所有codes 列表
	 * @param orgId
	 * @return
	 */
	public List<String> getTotalVirsulDutCodes(Integer orgId);

	//获取所有相关节点
	public List<String> getSubOrgFullNameList(String name);

	//根据全名获取节点名称
	public String getNameByFullName(String sonName);

	public void checkOrg(String fullName);

	public List<Organization> getSubOrgList(Integer orgId);

	public void updateAllName(List<Organization> orgList, Long actUserId);

	/**
	 * 获取该组织架构下最近的无主客户服务部
	 * @param orgId
	 * @return
     */
	public Integer getLatestWuZhu(Integer orgId);


	/**
	 * 获取所有字部门的组织架构
	 *
	 *
	 * @param orgId
	 * @return
	 */
	public List<Organization> getSubDepList(Integer orgId);
}
